var xjSortTable = {
	sortTable:null,
	titleClassName:null,
	orderType:"asc",
	ignoreText:["全选","选择","操作"],
	initSortTable : function(sortTable1,titleClassName){
		xjSortTable.sortTable = sortTable1;
		xjSortTable.titleClassName = titleClassName;
		if($(sortTable1).find("thead").length==0)
		{
			var html1 = "<thead>"+$(sortTable1).find('tr:first').html()+"</thead>";
			$(sortTable1).find("."+titleClassName).parent().remove();
			$(sortTable1).find("tbody").before(html1);
		}
		$(xjSortTable.sortTable).find("."+titleClassName).each(function(i){
			var titleText = $(this).text();
			var test = true;
			for(var m=0;m<xjSortTable.ignoreText.length;m++)
			{
				if(titleText.indexOf(xjSortTable.ignoreText[m])!=-1)
				{
					test = false;
					break;
				}
			}
			if(test)
			{
				$(this).bind('click', function(event) {
					xjSortTable.sortTableContent(i,$(this).attr("dataType"));
				});
			}
		});
	},
	sortTableContent : function(iCol, sDataType){
		var oTable = $(xjSortTable.sortTable).get(0);//获得表
	    var oTBody = oTable.tBodies[0];//获得放数据的body,因为该表格只有一个tbody,所以直接用[0]
	    var colRows = oTBody.rows;//获得tbody里所有的tr
	    var aTRs = new Array();//声明一个数组
	    for(var i = 0; i < colRows .length; i++)
	    {
	         aTRs[i] = colRows[i];//将tr依次放入数组中;
	    }
	    $("#sortArr_"+oTable.sortCol).remove();
	    if(oTable.sortCol == iCol)
	    {
	    	 if(xjSortTable.orderType=="asc")
	    		xjSortTable.orderType="desc"
	    	  else
	    	  	xjSortTable.orderType="asc"
	         aTRs.reverse();//如果当前要排的列和上次排的列是一样的,就直接逆向排序;也就是说连着对一列点两次,就会进行升序,降序的转换.
	    }
	    else
	    {
			 aTRs.sort(xjSortTable.getSortFunction(iCol, sDataType));//排序,并且传入一个获得到的比较函数; 
			 xjSortTable.orderType="asc"
	    }
	    var oFragement = document.createDocumentFragment();//创建文档碎片,用来存放排好的tr
	    for(var i = 0; i < aTRs.length; i++)
	    {
	         oFragement.appendChild(aTRs[i]);//将tr绑定到碎片上.
	    }
	    oTBody.appendChild(oFragement);//将碎片绑定在表格上
	    oTable.sortCol = iCol;//记住当前列,这个可以用来判断是对数组进行反向排序还是重新按列排;
	    if(xjSortTable.orderType=="asc")
	    {
	    	$($(xjSortTable.sortTable).find("."+xjSortTable.titleClassName)[iCol]).append("<span id=\"sortArr_"+iCol+"\" style=\"font-size:8px;\">▲</span>");
	    }
	    else
	    {
			 $($(xjSortTable.sortTable).find("."+xjSortTable.titleClassName)[iCol]).append("<span id=\"sortArr_"+iCol+"\" style=\"font-size:8px;\">▼</span>");
	    }
	},
	getSortFunction : function (iCol, sDataType)
	{
	    return function compareTRs(oTR1, oTR2){
	       var vValue1, vValue2;
	       if(oTR1.cells[iCol].getAttribute("value"))
	       {
	            vValue1 = xjSortTable.convert(oTR1.cells[iCol].getAttribute("value"), sDataType);
	            vValue2 = xjSortTable.convert(oTR2.cells[iCol].getAttribute("value"), sDataType);
	       }
	       else
	       {
	            vValue1 = xjSortTable.convert($(oTR1.cells[iCol]).text(), sDataType)
	            vValue2 = xjSortTable.convert($(oTR2.cells[iCol]).text(), sDataType)
	       }
	       return vValue1.localeCompare(vValue2);
	    }
	},
	convert : function(sValue, sDataType)
	{
	    switch(sDataType)
	    {
	          case "int":
	             return parseInt(sValue);
	          case "float":
	             return parseFloat(sValue);
	          case "date":
	             return new Date(Date.parse(sValue));
	          default:
	             return sValue.toString();
	    } 
	}
}